package com.qf.controller;

import com.qf.feign.SearchFeign;
import com.qf.pojo.Customer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;

/**
 * 客户微服务
 * @author lixu
 */
@RestController
@RequestMapping("/customer")
public class CustomerController {


    /**
     * loadbalancer : 负载均衡
     *     org.springframework.cloud:spring-cloud-starter-loadbalancer:2.2.2.RELEASE
     *
     */
    @Autowired
    private LoadBalancerClient loadBalancerClient;//只能跟注册中心进行注册与发现
    /**
     * org.springframework.web.client.RestTemplate;
     * Http请求：是由Spring公司提供的
     *          是由Spring框架根据Http请求协议封装的一个对象
     *          是由Spring框架模拟了一个浏览器的请求协议
     */
    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private SearchFeign searchFeign;

    /**
     * 传递参数  对象
     */
    @PostMapping("/pojo")
    public String pojo(@RequestBody Customer customer){

        String searchContent = searchFeign.pojo(customer);
        return "我是客户微服务:我要远程调用搜索微服务:::::" + searchContent;
    }


    /**
     * 列表查询  本次使用SpringCloud组件 中Feign来完成  封装后代码实现
     *
     *
     * http://localhost:9001/customer/feign?name=张三
     *
     */
    @GetMapping("/feign")
    public String listFeign(String name){
        String searchContent = searchFeign.list(name);
        return "我是客户微服务:我要远程调用搜索微服务:::::" + searchContent;
    }
    /**
     * 列表查询  本次使用SpringCloud组件 中Feign来完成  封装后代码实现
     * http://localhost:9001/customer/pathFeign/xiaoxiao
     */
    @GetMapping("/pathFeign/{name}")
    public String pathFeign(@PathVariable String name){
        String searchContent = searchFeign.pathFeign(name);
        return "我是客户微服务:我要远程调用搜索微服务:::::" + searchContent;
    }
    /**
     * 列表查询  底层源代码实现方式
     */
    @GetMapping("/list")
    public String list(){

        //1:使用默认策略 从注册中心服务端获取出一个搜索微服务  (ServiceInstance)
        ServiceInstance serviceInstance = loadBalancerClient.choose("QF-SEARCH");
        // uri : http://localhost:9002
        // url : http://localhost:9002/search/list
        String uri = serviceInstance.getUri().toString();
        //2:完成的路径  使用此路径发出Http请求
        String url = uri + "/search/list";
        //3: 发出请求 Http
        String searchContent = restTemplate.getForObject(url, String.class);

        return "我是客户微服务:我要远程调用搜索微服务:::::" + searchContent;
    }
}
